import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.List;
import java.util.concurrent.TimeUnit;

import static java.lang.Thread.sleep;
import static java.util.concurrent.TimeUnit.HOURS;
import static java.util.concurrent.TimeUnit.SECONDS;

public class Main {
    public static void main(String[] args) throws InterruptedException {
//        test01();
//        test012();
//        test03();
//        test04();
//        test05();
//        test06();
        test07();
    }

    private static void test07() {
        //显示等待
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //进入百度首页
        webDriver.get("https://www.baidu.com");
        //使用显示等待
        WebDriverWait wait = new WebDriverWait(webDriver,3);
        Boolean is_true = wait.until(ExpectedConditions.textToBe(By.cssSelector("#s-top-left > a:nth-child(1)"),"新闻"));
        if (is_true){
            System.out.println("测试通过");
        }else {
            System.out.println("测试不通过");
        }
    }

    private static void test06() throws InterruptedException {
        //用于隐式等待的练习
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度浏览器
        webDriver.get("https://www.baidu.com/");
        //定位输入框
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入“软件测试”
        search_input.sendKeys("软件测试");
        //定位百度一下按钮
        WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));
        baidu_button.click();
        //清空输入框的”软件测试“内容
        search_input.clear();
        //点击百度一下按钮
        //输入“前端”
        search_input.sendKeys("前端");
        //点击百度一下按钮
        baidu_button.click();
        webDriver.manage().timeouts().implicitlyWait(10,HOURS);//隐式等待和显示等待属于智能等待，故实际上不需要等待这么久，会按照情况自己调整时间
        //找到所有与“前端”相关的内容
        List<WebElement> search_result = webDriver.findElements(By.cssSelector("a em"));
        //使用隐式等待
        webDriver.manage().timeouts().implicitlyWait(3,SECONDS);//隐式等待和显示等待属于智能等待，故实际上不需要等待这么久，会按照情况自己调整时间
        //如果找到了则通过测试，否则测试不通过
        int flag = 0;
        for (int i = 0; i < search_result.size(); i++) {
            if (search_result.get(i).getText().equals("前端")){
                flag = 1;
            }
        }
        if (flag == 1){
            System.out.println("测试通过");
        }else {
            System.out.println("测试不通过");
        }
//        webDriver.quit();
    }

    private static void test05() {
        //用于验证submit和click的区别:使用submit
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到新闻连接
        WebElement news_button = webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));
        //使用submit进行点击
        news_button.submit();//因为新闻这个元素的信息不在form标签下面，所以不能使用submit进行点击
        webDriver.quit();
    }

    private static void test04() {
        //用于验证submit和click的区别:使用click
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com/");
        //找到新闻连接
        WebElement news_button = webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)"));
        //使用click进行点击
        news_button.click();
        webDriver.quit();
    }

    private static void test03() throws InterruptedException {
        //submit和clear
        //创建驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度浏览器
        webDriver.get("https://www.baidu.com/");
        //定位输入框
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //输入“软件测试”
        search_input.sendKeys("软件测试");
        //定位百度一下按钮
        WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));
        baidu_button.click();
        //清空输入框的”软件测试“内容
        search_input.clear();
        //点击百度一下按钮
        //输入“前端”
        search_input.sendKeys("前端");
        //点击百度一下按钮
        baidu_button.click();
        sleep(1000);
        //找到所有与“前端”相关的内容
        List<WebElement> search_result = webDriver.findElements(By.cssSelector("span em"));
        sleep(1000);
        //如果找到了则通过测试，否则测试不通过
        Boolean flag = false;
        for (int i = 0; i < search_result.size(); i++) {
            if (search_result.get(i).getText().equals("前端")){
                flag = true;
            }
        }
        if (flag){
            System.out.println("测试通过");
        }else {
            System.out.println("测试不通过");
        }
        webDriver.quit();
    }

    private static void test012() throws InterruptedException {
        //创建驱动
        WebDriver webDriver  = new ChromeDriver();
        //打开百度
        webDriver.get("https://www.baidu.com/");
        //找到搜索框
        WebElement search_input = webDriver.findElement(By.cssSelector("#kw"));
        //在搜索框中输入“软件测试”
        search_input.sendKeys("软件测试");
        //找到“百度以下”
        WebElement baidu_button = webDriver.findElement(By.cssSelector("#su"));
        //点击“百度以下”按钮
        baidu_button.click();
        sleep(1000);
        //找到所有与“软件测试”相关的元素
        List<WebElement> search_result = webDriver.findElements(By.xpath("//font[text()=\"软件测试\"]"));
        sleep(1000);
        //遍历List,如果元素的文本等于软件测试，则“测试通过”
        for (int i = 0; i < search_result.size(); i++) {
            if (search_result.get(i).getText().equals("软件测试")){//.getText()获取元素文本
                System.out.println("测试通过");
            }else {
                System.out.println("测试不通过");
            }
        }
        //否则“测试不通过”
        webDriver.quit();
    }

    private static void test01() {
        //创建一个驱动
        WebDriver webDriver = new ChromeDriver();
        //打开百度首页
        webDriver.get("https://www.baidu.com");
        //定位百度搜索框：通过css选择器定位元素
//        WebElement search_input = webDriver.findElement(By.cssSelector(".s_ipt"));//定位一个元素
        //通过xpath定位元素
//        WebElement search_input = webDriver.findElement(By.xpath("//form/span[1]/input"));
        //通过标签定位元素
        WebElement search_input = webDriver.findElement(By.tagName("input"));
        if (search_input == null){
            System.out.println("测试不通过");
        }else {
            System.out.println("测试通过");
        }
        //关闭浏览器
        webDriver.quit();
//        webDriver.close();
    }
}
